(in-package :TRAPS)
; Generated from #P"macintosh-hd:hd3:CInterface Translator:Source Interfaces:if_ether.h"
; at Sunday July 2,2006 7:27:58 pm.
; 
;  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
;  *
;  * @APPLE_LICENSE_HEADER_START@
;  * 
;  * The contents of this file constitute Original Code as defined in and
;  * are subject to the Apple Public Source License Version 1.1 (the
;  * "License").  You may not use this file except in compliance with the
;  * License.  Please obtain a copy of the License at
;  * http://www.apple.com/publicsource and read it before using this file.
;  * 
;  * This Original Code and all software distributed under the License are
;  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
;  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
;  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
;  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
;  * License for the specific language governing rights and limitations
;  * under the License.
;  * 
;  * @APPLE_LICENSE_HEADER_END@
;  
; 
;  * Copyright (c) 1982, 1986, 1993
;  *	The Regents of the University of California.  All rights reserved.
;  *
;  * Redistribution and use in source and binary forms, with or without
;  * modification, are permitted provided that the following conditions
;  * are met:
;  * 1. Redistributions of source code must retain the above copyright
;  *    notice, this list of conditions and the following disclaimer.
;  * 2. Redistributions in binary form must reproduce the above copyright
;  *    notice, this list of conditions and the following disclaimer in the
;  *    documentation and/or other materials provided with the distribution.
;  * 3. All advertising materials mentioning features or use of this software
;  *    must display the following acknowledgement:
;  *	This product includes software developed by the University of
;  *	California, Berkeley and its contributors.
;  * 4. Neither the name of the University nor the names of its contributors
;  *    may be used to endorse or promote products derived from this software
;  *    without specific prior written permission.
;  *
;  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
;  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
;  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
;  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
;  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
;  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
;  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
;  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
;  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
;  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
;  * SUCH DAMAGE.
;  *
;  *	@(#)if_ether.h	8.3 (Berkeley) 5/2/95
;  * $FreeBSD: src/sys/netinet/if_ether.h,v 1.24 1999/12/29 04:40:58 peter Exp $
;  
; #ifndef _NETINET_IF_ETHER_H_
; #define _NETINET_IF_ETHER_H_

(require-interface "sys/appleapiopts")

(require-interface "net/ethernet")

(require-interface "netinet/in")

(require-interface "net/if_arp")
; #define ea_byte	ether_addr_octet
; #ifdef __APPLE__
; #ifdef __APPLE_API_UNSTABLE
#| #|

#define ETHER_LOOKUP_MULTI(addrlo, addrhi, ac, enm) \
	 \
	 \
	 \
	 \
{ \
	for ((enm) = (ac)->ac_multiaddrs; \
	    (enm) != NULL && \
	    (bcmp((enm)->enm_addrlo, (addrlo), 6) != 0 || \
	     bcmp((enm)->enm_addrhi, (addrhi), 6) != 0); \
		(enm) = (enm)->enm_next); \
}


#define ETHER_NEXT_MULTI(step, enm) \
	  \
	  \
{ \
	if (((enm) = (step).e_enm) != NULL) \
		(step).e_enm = (enm)->enm_next; \
}

#define ETHER_FIRST_MULTI(step, ac, enm) \
	 \
	 \
	 \
{ \
	(step).e_enm = (ac)->ac_multiaddrs; \
	ETHER_NEXT_MULTI((step), (enm)); \
}
#endif
|#
 |#
;  __APPLE_API_UNSTABLE 

; #endif /* __APPLE__ */

; 
;  * Macro to map an IP multicast address to an Ethernet multicast address.
;  * The high-order 25 bits of the Ethernet address are statically assigned,
;  * and the low-order 23 bits are taken from the low end of the IP address.
;  
; #define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) 	/* struct in_addr *ipaddr; */ 	/* u_char enaddr[ETHER_ADDR_LEN];	   */ { 	(enaddr)[0] = 0x01; 	(enaddr)[1] = 0x00; 	(enaddr)[2] = 0x5e; 	(enaddr)[3] = ((u_char *)ipaddr)[1] & 0x7f; 	(enaddr)[4] = ((u_char *)ipaddr)[2]; 	(enaddr)[5] = ((u_char *)ipaddr)[3]; }
; 
;  * Macro to map an IP6 multicast address to an Ethernet multicast address.
;  * The high-order 16 bits of the Ethernet address are statically assigned,
;  * and the low-order 32 bits are taken from the low end of the IP6 address.
;  
; #define ETHER_MAP_IPV6_MULTICAST(ip6addr, enaddr)			/* struct	in6_addr *ip6addr; */					/* u_char	enaddr[ETHER_ADDR_LEN]; */				{                                                                       	(enaddr)[0] = 0x33;							(enaddr)[1] = 0x33;							(enaddr)[2] = ((u_char *)ip6addr)[12];					(enaddr)[3] = ((u_char *)ip6addr)[13];					(enaddr)[4] = ((u_char *)ip6addr)[14];					(enaddr)[5] = ((u_char *)ip6addr)[15];				}
; 
;  * Ethernet Address Resolution Protocol.
;  *
;  * See RFC 826 for protocol description.  Structure below is adapted
;  * to resolving internet addresses.  Field names used correspond to
;  * RFC 826.
;  
(defrecord ether_arp
   (ea_hdr :ARPHDR)
                                                ;  fixed-size header 
   (arp_sha (:array :UInt8 6))
                                                ;  sender hardware address 
   (arp_spa (:array :UInt8 4))
                                                ;  sender protocol address 
   (arp_tha (:array :UInt8 6))
                                                ;  target hardware address 
   (arp_tpa (:array :UInt8 4))
                                                ;  target protocol address 
)
; #define	arp_hrd	ea_hdr.ar_hrd
; #define	arp_pro	ea_hdr.ar_pro
; #define	arp_hln	ea_hdr.ar_hln
; #define	arp_pln	ea_hdr.ar_pln
; #define	arp_op	ea_hdr.ar_op
(defrecord sockaddr_inarp
   (sin_len :UInt8)
   (sin_family :UInt8)
   (sin_port :UInt16)
   (sin_addr :IN_ADDR)
   (sin_srcaddr :IN_ADDR)
   (sin_tos :UInt16)
   (sin_other :UInt16)
; #define SIN_PROXY 1
)
; 
;  * IP and ethernet specific routing flags
;  
; #define	RTF_USETRAILERS	RTF_PROTO1	/* use trailers */
; #define RTF_ANNOUNCE	RTF_PROTO2	/* announce new arp entry */
; #ifdef	KERNEL
#| #|
#ifdef__APPLE_API_PRIVATE
extern u_char	ether_ipmulticast_min[ETHER_ADDR_LEN];
extern u_char	ether_ipmulticast_max[ETHER_ADDR_LEN];
extern struct	ifqueue arpintrq;

int	arpresolve __P((struct arpcom *, struct rtentry *, struct mbuf *,
			struct sockaddr *, u_char *, struct rtentry *));
#endif
#ifdef__APPLE_API_UNSTABLE
void	arp_ifinit __P((struct arpcom *, struct ifaddr *));
#endif
#endif
|#
 |#

; #endif


(provide-interface "if_ether")